<?php
/**
 * Created by PhpStorm.
 * User: s.utkin
 * Date: 18.11.2014
 * Time: 18:14
 */

namespace Multilang\TranslateEntities;


use Multilang\TranslateEntities;
use Pinenut\Model2\Embedded\ReferenceContainer\One;
use Pinenut\Model2\Embedded\Reference;
use Pinenut\User\Profile;

class History extends \Model {
	CONST OPERATION_CHANGE_DRAFT = 2;
	CONST OPERATION_APPROVE = 3;

	/**
	 * Пользователь, инициировавший действие
	 *
	 * @var \Pinenut\Model2\Embedded\ReferenceContainer\One
	 */
	public $authorId;

	/**
	 * Тип действия
	 *
	 * @var int
	 */
	public $operationType;

	/**
	 * Сущность, над которой производилось действие
	 *
	 * @var \Pinenut\Model2\Embedded\ReferenceContainer\One
	 */
	public $entityId;

	/**
	 * Символьный идентификатор языка
	 *
	 * @var string
	 */
	public $langId;

	/**
	 * Timestamp времени произведения операции
	 *
	 * @var int
	 */
	public $date;

	/**
	 * Новое содержимое сушности
	 *
	 * @var string
	 */
	public $content;

	/**
	 * Старое содержимое сушности
	 *
	 * @var string
	 */
	public $previousContent;

	public static function fields()
	{
		return array_merge(
			parent::fields(),
			[
				'authorId' => [
					One::className(),
					Reference::className(),
					Profile::className()
				],
				'operationType' => static::INT,
				'entityId' => [
					One::className(),
					Reference::className(),
					TranslateEntities::className()
				],
				'langId' => static::STRING,
				'date' => static::INT,
				'content' => static::STRING,
				'previousContent' => static::STRING,
			]
		);
	}

	/**
	 * Добавляет в лог результат операции
	 *
	 * @param $authorId - идентификатор профиля пользователя
	 * @param $operationType - тип операции (History::*)
	 * @param $entityId - идентификатор сущности, над которой производится операция
	 * @param $langId - символьный идентификатор языка
	 * @param $content - новое содержимое сущности
	 * @param $previousContent - старое содержимое сущности
	 * @param null|int $date - время произведения операции над сущностью
	 * @return string - идентификатор сущности, добавленной в лог
	 */
	public static function add($authorId, $operationType, $entityId, $langId, $content, $previousContent, $date = null)
	{
		if ($date === null) {
			$date = time();
		}

		$model = new static;
		$model->authorId[$authorId];
		$model->operationType = $operationType;
		$model->entityId[$entityId];
		$model->langId = $langId;
		$model->date = $date;
		$model->content = $content;
		$model->previousContent = $previousContent;

		$model->save();

		return (string)$model;
	}
	
	/**
	 * Удалятор записи из истории. 
	 * К одной переводимой сущности может относиться несколько сущностей в истории.
	 * Находим каждую, и удаляем.
	 * 
	 * @param $entityId - идентификатор переводимой сущности для удаления связанных записей в истории
	 */
	public static function removeItem($entityId)
	{
		$model = History::find()->where('entityId._ref', $entityId)->all();
		if($model)
		{
			foreach($model as $item)
			{
				$item->remove();				
			}
		}
	}
}